package com.hotel.wallet.service.impl;

import cn.hutool.core.util.RandomUtil;
import com.hotel.common.param.PayAdd;
import com.hotel.common.vo.R;
import com.hotel.core.alipay.AliPayUtil;
import com.hotel.user.entity.PayLog;
import com.hotel.user.entity.UserWallet;
import com.hotel.wallet.mapper.PayLogMapper;
import com.hotel.wallet.mapper.UserWalletMapper;
import com.hotel.wallet.service.UserWalletService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
 * <p>
 * 用户余额表 服务实现类
 * </p>
 *
 * @author zhy
 * @since 2024-06-17
 */
@Service
public class UserWalletServiceImpl extends ServiceImpl<UserWalletMapper, UserWallet> implements UserWalletService {

   @Autowired
   private PayLogMapper payLogMapper;
    /**
     * 支付宝充值
     *
     * @param payAdd
     * @return
     */
    @Override
    public R rechargeWalletByAlipay(PayAdd payAdd) {

        // 1.写入充值记录
        PayLog payLog = new PayLog();
        payLog.setUserId(payAdd.getUserId());// 用户表id
        payLog.setPayType(2);// 支付类型 1.钱包 2.支付宝 3.微信支付
        payLog.setMoney((int) (payAdd.getMoney() * 100));// 订单金额 单位分
        payLog.setTitle("支付宝充值");// 订单标题

        // z开头表示支付宝的订单
        // 时间戳+订单号(胡图的6位随机数)
        String no = "z" + System.currentTimeMillis() + RandomUtil.randomNumbers(6);
        payLog.setNo(no);// 订单号
        payLog.setStatus(1);// 支付状态：1.未支付 2.已支付 3.取消支付 4.超时支付 5.退款
        payLog.setCtime(new Date());// 创建时间
        payLog.setUtime(new Date());// 更新时间

        int num = payLogMapper.insert(payLog);

        if (num > 0) {

            // 2.调用支付宝支付
            String html = AliPayUtil.createPay(no, payAdd.getMoney() * 100, "酒店钱包充值");

            return R.ok(html);// 前端看到支付宝界面
        }

        return R.fail("支付失败");
    }
}

